package com.jshop.seckill.web.controller;

import cn.hutool.core.util.IdUtil;
import com.jshop.seckill.domain.*;
import com.jshop.seckill.web.service.AddressService;
import com.jshop.seckill.web.service.CartService;
import com.jshop.seckill.web.service.OrderService;
import com.jshop.seckill.web.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;

/*
 * @Author yaxiongliu
 * @CreateDate
 * @Version 1.0
 * @Description //TODO 订单
 *
 * 订单提交:创建出一个新的订单
 * 商品结算按钮功能
 */
@RestController
@RequestMapping("order")
public class OrderController {

    @Autowired
    private UserService userService;
    @Autowired
    private AddressService addressService;
    @Autowired
    private CartService cartService;
    @Autowired
    private OrderService orderService;
    /**
     * 订单提交功能 : 创建出一个新的订单
     */
    @RequestMapping("/submitOrder")
    public String subOrder(Integer addressId,String token,HttpServletRequest request, HttpServletResponse response) {
        //2.调用AddressService的接口，查询收货地址
        UserAddress address = addressService.findByAid(addressId);
        //3.获取Session会话中用户对象
        TbUser user = userService.getUserInfoFromCache(token);
        //4.获取Redis中的购物车对象
        StoreCart cart = cartService.getCartFromRedis(user);
        //5.创建订单对象 :
        StoreOrder order = new StoreOrder();
        // 订单号，huTool工具类，生成唯一订单编号
        order.setOrderId(IdUtil.simpleUUID());
        // 下单时间
        order.setPayTime(new Date().getTime());
        // 订单金额
        order.setTotalPrice(cart.getCartTotal());
        // 支付状态[未支付0，已支付1]
        order.setPaid(0);
        // 地址
        order.setUserAddress(address.getDetailAddress());
        // 联系人
        order.setRealName(address.getContact());
        // 手机号
        order.setUserPhone(address.getMobile());
        // 用户id
        order.setUid(user.getUid());
        // 下单用户
        order.setUser(user);

        //6.创建订单项列表，设置到订单中
        //遍历购物项，在购物车对象中
        LinkedHashMap<String, StoreCartItem> cartItemMap = cart.getMap();
        // 订单项列表
        List<StoreOrderItem> orderItemList = new ArrayList<>();
        //遍历Map集合的所有的value值
        for (StoreCartItem cartItem : cartItemMap.values()) {
            //创建订单项的对象，设置到订单项目的集合中
            StoreOrderItem orderItem = new StoreOrderItem();
            //初始化数据
            // 订单项id,会自动生成
            // 生成时间
            orderItem.setItemtime(new Date());
            // 支付状态[未支付0，已支付1]
            orderItem.setState(0);
            // 购买数量
            orderItem.setNum(cartItem.getCartNum());
            // 小计
            orderItem.setSubtotal(cartItem.getSubTotal());
            // 商品id（线路）
            orderItem.setProductId(cartItem.getProduct().getId());
            // 订单id
            orderItem.setOrderId(order.getOrderId());
            // 商品（线路）,可以不写
            orderItem.setProduct(cartItem.getProduct());
            //订单项设置到列表中
            orderItemList.add(orderItem);
        }
        //订单项列表，设置到订单中去
        order.setOrderItemList(orderItemList);

        //7.调用OrderService保存订单，连带着保存订单项
        orderService.save(order);
        //8.请求重定向 支付界面，需要支付连接地址
        return "redirect:/pay/createPayUrl?orderid=" + order.getOrderId() + "&price="+cart.getCartTotal();
    }
    /**
     * 商品结算按钮功能:
     *   查询地址信息
     *   查询购物车
     *   跳转订单详情页面
     */
}
